package com.donnees.dao;

import com.donnees.mysql.MySqlDAOFactory;

/**
 * @name DAOFactory
 * @description "Multinationale" ou Fabrique de fabrique.
 * 				Sert à fabriquer les fabriques d'objets, peut générer actuellement une fabrique MySQL.
 * @method static - getDAOFactory - Retourne la fabrique concrète de DAO demandée.
 * @author Ambroise
 * @since 07/03/2012
 *
 */
public abstract class DAOFactory {

	/*
	 * Constantes de classe représentant les différentes fabriques instanciables.
	 */
	public static final int MYSQL = 1;
	
	/*
	 * Méthodes abstraites permettant de retourner les DAO quel que soit la source de données.
	 * Méthodes implémentées par les fabriques concernées.
	 */
	// Exemple:
	public abstract AbstractDAO<?> getCarteDAO();
	public abstract AbstractDAO<?> getFamilleTypesDAO();
	public abstract AbstractDAO<?> getHistoriqueDAO();
	public abstract AbstractDAO<?> getImageDAO();
	public abstract AbstractDAO<?> getParcours_PoiDAO();
	public abstract AbstractDAO<?> getParcoursDAO();
	public abstract AbstractDAO<?> getPoi_TypesDAO();
	public abstract AbstractDAO<?> getPoiDAO();
	public abstract AbstractDAO<?> getTypesDAO();
	
	/**
	 * @name
	 * @description Retourne la fabrique concrète de DAO demandée.
	 */
	public static DAOFactory getDAOFactory(int factory){
		switch(factory){
			case MYSQL:
				return new MySqlDAOFactory();
			default:
				return null;
		}
	}
	
}
